package com.gome.boot.config.schedule;

import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.scheduling.annotation.AsyncConfigurer;

import java.util.concurrent.Executor;

/**
 * 基础异步Schedule配置.
 *
 * @author baoxiufeng
 */
public abstract class BaseAsyncScheduleConfig extends BaseScheduleConfig implements AsyncConfigurer {

    @Override
    public Executor getAsyncExecutor() {
        return createScheduler(getExecutorTaskPoolSize());
    }

    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }

    /**
     * 定时任务异步执行需要使用到的线程池大小.
     * <br/>由子类根据实际情况给出需要的线程池大小.
     * <br/>一般设置为定义的定时任务数量即可，如果存在耗时的定时任务，可以酌情增加此线程池大小.
     *
     * @return 使用到的异步执行线程池大小
     */
    protected abstract int getExecutorTaskPoolSize();
}
